package com.color.admin.common.core.utils.web;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author HaiQiu
 * @date 2021/11/19
 * 时间工具类
 */
public class DateUtils {

    public static final String DEFAULT = "yyyy-MM-dd HH:mm:ss";
    public static final String YMDHMS = "yyyyMMddHHmmss";

    /**
     * 根据传入格式的时间转为对应格式字符串时间
     *
     * @param date   时间
     * @param format 格式
     * @return 字符串时间
     */
    public static String dateFormat(Date date, String format) {
        if (null == date || StringUtils.isBlank(format)) {
            return null;
        }
        DateFormat df = new SimpleDateFormat(format);
        return df.format(date);
    }

    public static String dateFormat(Date date) {
        return dateFormat(date,DEFAULT);
    }

    /**
     * 根据传入字符串时间和格式转换时间
     *
     * @param time   字符串时间
     * @param format 格式
     * @return 时间
     */
    public static Date strFormat(String time, String format) {
        if (StringUtils.isBlank(time) || StringUtils.isBlank(format)) {
            return null;
        }
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DEFAULT);
        Date date = null;
        try {
            date = simpleDateFormat.parse(time);
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return date;
    }

    public static Date strFormat(String time) {
        if (StringUtils.isBlank(time)) {
            return null;
        }
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DEFAULT);
        Date date = null;
        try {
            date = simpleDateFormat.parse(time);
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 获取当前时间的str
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String getCurrentTime() {
        return dateFormat(new Date(), DEFAULT);
    }


    /**
     * 构造指定年月的所有日期
     *
     * @param year
     * @param month
     * @return
     */
    public static List<String> getMonthFullDay(int year, int month) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT);
        List<String> fullDayList = new ArrayList<>(32);
        // 获得当前日期对象
        Calendar cal = Calendar.getInstance();
        cal.clear();// 清除信息
        cal.set(Calendar.YEAR, year);
        // 1月从0开始
        cal.set(Calendar.MONTH, month - 1);
        // 当月1号
        cal.set(Calendar.DAY_OF_MONTH, 1);
        int count = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        for (int j = 1; j <= count; j++) {
            fullDayList.add(dateFormat.format(cal.getTime()));
            cal.add(Calendar.DAY_OF_MONTH, 1);
        }
        return fullDayList;
    }
}
